<?php
namespace App\Http\Controllers\Content;
use App\Http\Controllers\Controller;
use App\Http\Requests\ContentArticleRequest;
use App\Models\ArticleModel;
use App\Models\CategoryModel;
use Illuminate\Http\Request;

class ArticleController extends Controller
{
    public  function __construct()
    {
        $this->middleware('auth');
    }
    public function index()
    {
//        dd(auth()->user());
        //ArticleModel::类
        $articles = ArticleModel::orderBy('id','desc')->paginate(10);
//        渲染视图模板
        return view('content.article_index',compact('articles'));
    }
//创建一个发表文章之前选择模板的方法
//selectCategory(里面的是类型指定)
public function selectCategory(CategoryModel $category ){
        //获取整理后的无限级栏目分类数据
        $categorys = $category->getAllCategory();
        //渲染模板,并将上面的模板数据传递过去
    return view('content.article_select_category',compact('categorys'));
}
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(ArticleModel $articlemodel,Request $request)
    {
        //上面通过类型指定的方式指定$articlemodel是一个ArticleModel的对象
//        create方法中通过类型指定,指定$request是Request类的对象,在php中对象就可以调用属性,调用方法来达到我们的目的
        //这里就用到了$request中的query()方法,将跟随请求一起传递过来的参数拿到
        //        从栏目表中将传递过来的category_id对应的栏目信息找到
//        $category = CategoryModel::find($request->query('category_id'));
        //上面那句代码还可以这样写
        $category = CategoryModel::find($request->query('category_id'));
        //从跳转到文章创建页面时传递过来的category_id可以获取到相应栏目对象$category
        //获取文章所在栏目对应的contentmodel模型中设置的扩展字段
         $extendField = $articlemodel->getextendField($category);
//         dd($extendField);
        //        渲染模板视图
        return view('content.article_create',compact('extendField','category'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(ContentArticleRequest $request)
    {
//        store和update都是要往数据库中添加数据,这个时候数据都在$request
//       dd($request->toArray());
        //        dd([auth()->user()->id,$request->all()]);
//        将request请求过来的内容存到相应数据表中,方法一通过post请求过后create方法,方法二是使用save方法
        $data = $request->all();
        //向$data数组中新增一个user_id字段,将当前用户的id添加进$data数组中一起存入数据表中,这样就知道这篇文章是哪个用法发表的了
        $data['user_id'] = auth()->user()->id;
//        通过使用对应模型的create方法将$data数组中的内容写入到相应的数据表中
        ArticleModel::create($data);
//        第二种方法是使用save的方式,将属性值保存到后台数据表中
//        (new ArticleModel())->user()->associate(auth()->user())->fill($request->all())->save()
        //执行到这里说明数据已经写入到数据表中
        return redirect(route('content.articlemodel.index'))->with('success','文章发表成功');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\ArticleModel  $articleModel
     * @return \Illuminate\Http\Response
     */
    public function show(ArticleModel $articleModel)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\ArticleModel  $articleModel
     * @return \Illuminate\Http\Response
     */
    public function edit(ArticleModel $articlemodel)
    {
//        dd($articlemodel);
        //首先通过当前文章的category_id 获取对应栏目模型
//        $category  = CategoryModel::find($articlemodel->category_id);
        $category = $articlemodel->category;
        $categorys = $category->getAllCategory();
        //调用当前文章对象中的getExtendField方法获取扩展字段
        $extendField = $articlemodel->getextendField($category);
        //渲染edit模板,并传递相应的参数
        return view('content.article_edit',compact('categorys','extendField','articlemodel'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\ArticleModel  $articleModel
     * @return \Illuminate\Http\Response
     */
    public function update(ContentArticleRequest $request, ArticleModel $articlemodel)
    {
//        打印出来的结果和edit编辑刚开始传递过来的内容是一样的也就是$articlemodel中存放的是edit编辑前的内容
       // dd($articlemodel);
        //但是如果将上面的$articlemodel  改成$Articlemodel 或者别的任何和路由列表中的的参数$articlemodel不相同的名字的时候就打印不出原来的文章模型中的内容
        // dd($request);直接打印$rqeuest的话是ContentArticleRequest对象但是其中attributes属性是空的
        //dd($request->all());//这样就能打印出来修改之后的内容了
        //通过调用文章模型的update方法将新修改后的内容$request->all()更新到文章表中
        $articlemodel->update($request->all());
        //更新过之后跳转到文章首页
        return redirect(route('content.articlemodel.index'))->with('success','文章更新成功');

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\ArticleModel  $articleModel
     * @return \Illuminate\Http\Response
     */
    public function destroy(ArticleModel $articlemodel)
    {
        //
    }
}
